package com.liangtian.mdm.util;

import com.liangtian.mdm.base.constants.ResultCode;
import com.liangtian.mdm.base.exception.BaseRuntimeException;

import java.lang.reflect.Field;
import java.util.Map;

/**
 * 判断一个对象中的某些字段是否为空
 *
 * @author Qi
 */
public class CheckNotNullUtils {

    /**
     * 校验map中指定参数是否为空
     * @param map
     * @param args
     * @return
     */
    public static String checkMapNotNull(Map<String,Object> map, String... args) {
        for (String arg : args) {
            Object o = map.get(arg);
            if (o == null) {
                return arg;
            }
            if (o instanceof String) {
                if (o == null || "".equals(((String) o).trim())) {
                    return arg;
                }
            }
        }
        return null;
    }

    /**
     * 判断一个对象中的某些字段是否为空
     *
     * @param obj 传入一个对象
     * @param args 需要判断的是否为空的字段
     * @return 当判断出有为空的字段时，会返回为空的字段，当传入的字段都不为空时，返回null
     */
    public static String checkObjNotNull(Object obj, String... args) {
        Class aClass = obj.getClass();
        Field[] fs = aClass.getDeclaredFields();
        try {
            for (Field f : fs) {
                // 设置些属性是可以访问的
                f.setAccessible(true);
                if ((f != null) && (!"".equals(f))) {
                    //设置权限
                    f.setAccessible(true);
                    Object o = null;
                    o = f.get(obj);
                    String fieldName = f.getName();
                    for (String arg : args) {
                        if (arg.equals(fieldName)) {
                            if (o == null) {
                                return arg;
                            }
                            if (o instanceof String) {
                                if (o == null || "".equals(((String) o).trim())) {
                                    return arg;
                                }
                            }

                        }


                    }
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
            throw new BaseRuntimeException(ResultCode.FAIL,e);
        }
        return null;
    }
}
